-----------------------------------------------------------------------------
--
-- Module      :  TypesTests
-- Copyright   :
-- License     :  AllRightsReserved
--
-- Maintainer  :  Eduard Sergeev
-- Stability   :  Highly Experimental
-- Portability :
--
-- Type-level types and operations tests
--
-----------------------------------------------------------------------------
{-# LANGUAGE FlexibleContexts, TypeOperators  #-}


module Data.Unit.Tests.TypeTests (

ls

)where

import Data.Unit.Types
import Data.Unit.Type.Internal
import Data.Unit.Metric


ls = [
 show (undefined :: (Less One Three r) => r) == "HTrue",
 show (undefined :: (Less Two Two r) => r) == "HFalse",
 show (undefined :: (Less One Zero r) => r) == "HFalse",

 show (undefined :: (Greater Three One r) => r) == "HTrue",
 show (undefined :: (Greater Two Two r) => r) == "HFalse",
 show (undefined :: (Greater Zero One r) => r) == "HFalse",

 show (undefined :: (LessOrEqual Two Three r) => r) == "HTrue",
 show (undefined :: (LessOrEqual One One r) => r) == "HTrue",
 show (undefined :: (LessOrEqual One Zero r) => r) == "HFalse",

 show (undefined :: (GreaterOrEqual Two One r) => r) == "HTrue",
 show (undefined :: (GreaterOrEqual Zero Zero r) => r) == "HTrue",
 show (undefined :: (GreaterOrEqual Two Three r) => r) == "HFalse" ]

a1 = undefined :: And HTrue HFalse r => r
a2 = undefined :: And HTrue HTrue r => r
o1 = undefined :: Or HTrue HFalse r => r
o2 = undefined :: Or HFalse HFalse r => r

e1 = undefined :: AreEqual S M r => r
e2 = undefined :: AreEqual S S r => r
e3 = undefined :: AreEqual (S :/: M) (M :/: S) r => r
e5 = undefined :: (AreEqual (S :*: M) (S :*: M) r) => r
e6 = undefined :: (AreEqual (S :*: M) (M :*: S) r) => r
e7 = undefined :: (AreEqual (S :*: M) (M :*: M) r) => r

i1 = undefined :: (InsertBefore (U :*: M :*: S) S r) => r
i2 = undefined :: (InsertBefore (U :*: M :*: S) M r) => r
i3 = undefined :: (InsertBefore (U :*: M :*: S :*: S) S r) => r
i4 = undefined :: (InsertBefore (U :*: M :*: S :*: S) Kg r) => r
--i5 = undefined :: (InsertBefore (U :*: M) U r) => r
--i6 = undefined :: (InsertBefore U U r) => r




--rc1 = undefined :: (Remove M M (t',e'), Cons' t' M r) => r
r1 = undefined :: (Remove (U :*: M) M r) => r
r2 = undefined :: (Remove (U :*: M :*: M) M r) => r
r3 = undefined :: (Remove (U :*: M :*: S) S r) => r
r4 = undefined :: (Remove (U :*: M :*: S) M r) => r
r5 = undefined :: (Remove (U :*: M :*: M :*: S) M r) => r
r6 = undefined :: (Remove (U :*: M :*: M :*: S :*: S) M r) => r
r7 = undefined :: (Remove (U :*: M :*: M :*: S :*: S) S r) => r
r8 = undefined :: (Remove (U :*: M :*: M :*: S :*: S) Kg r) => r

r10 = undefined :: (Except (U :*: M :*: M :*: S) (U :*: S :*: S) r) => r
--r11 = undefined :: (Except (U :*: M :*: M :*: S) (U :*: M :*: U) r) => r
r12 = undefined :: (Except (U :*: M :*: M) (U :*: S :*: S) r) => r
r13 = undefined :: (Except (U :*: M :*: S) (U :*: M :*: S) r) => r
r14 = undefined :: (Except (U :*: M) (U :*: M :*: S) r) => r
r15 = undefined :: (Except U U r) => r
r16 = undefined :: (Except U (U :*: S) r) => r
r17 = undefined :: (Except (U :*: S) U r) => r
r18 = undefined :: (Except (U :*: S) (U :*: S) r) => r
r19 = undefined :: (Except (U :*: S) (U :*: M) r) => r